
#include "arch/arm64/Arm64.h"

#define TAG "DataProcessing"

int DataProcessing(uint32_t code) 
{
	int _err = -1;
	Abort("Data Processing -- Immediate->Err:");
	return _err;
}
//
//int Arm64OpDecorder::_dataProcessing(uint32_t code)
//{
//	int _err = 0;
//	int op0 = GetBitMap(code, 22, 3);
//	if ((op0 & 0x0c) == 0) {
//		//00xx
//		bool op = GetBitBool(code, 31);
//		int Rd = GetBitMap(code, 0, 4);
//		uint32_t immhi = GetBitMap(code, 5, 18);
//		uint32_t immlo = GetBitMap(code, 29, 1);
//
//		LogZ("PC-rel. addressing->" << "label:" << (op ? "ADRP" : "ADR"));
//		if (op) {
//
//		}
//		else {
//			//ADR 
//			int64_t m = 0;
//			SignExtend(m, (immhi << 2) | immlo, 21);
//			GeneralRN(_core, Rd) = _pc + m;
//			LogZ("PC-rel. addressing->" << std::dec << m << " ,Rd:" << Rd << ",*Rd:" << std::hex << GeneralRN(_core, Rd));
//			goto succ;
//		}
//	}
//	else if ((op0 & 0x0E) == 0x08)
//	{
//		bool sf = GetBitBool(code, 31);
//		int op = GetBitMap(code, 29, 1);
//		bool n = GetBitBool(code, 22);
//		int Rd = GetBitMap(code, 0, 4);
//		int Rn = GetBitMap(code, 5, 4);
//		BitVar6 immr = {
//			.a = GetBitMap(code, 16, 21)
//		};
//		BitVar6 imms = {
//			.a = GetBitMap(code, 10, 15)
//		};
//		if ((!sf && n)) {
//			Abort("Logical(immediate)->sf:" << sf << ",n:" << n);
//		}
//		uint64_t imm = _decodeBitMasks(n, imms, immr, true, sf ? 64 : 32);
//		LogZ("Logical(immediate)->" << "Rd:" << Rd << ",*Rd:" << std::hex << GeneralRN(_core, Rd) << ",Rn:" << Rn << ",*Rn:" << std::hex << GeneralRN(_core, Rn));
//		switch (op)
//		{
//		case 0:
//		{
//			uint64_t ret = imm & GeneralRN(_core, Rn);
//			LogZ("Logical(immediate)->" << ",ret=" << ret << "label:" << "AND (immediate)-" << (sf ? "64bit" : "32bit"));
//			if (Rd == 31) {
//				SpecialSPS(_pstate, _special, EL(_pstate), ret);
//			}
//			else {
//				GeneralRN(_core, Rd) = ret;
//			}
//		}
//		break;
//		case 1:
//			LogZ("Logical(immediate)->" << "label:" << "ORR (immediate)-" << (sf ? "64bit" : "32bit"));
//			break;
//		case 2:
//			LogZ("Logical(immediate)->" << "label:" << "EOR (immediate)-" << (sf ? "64bit" : "32bit"));
//			break;
//		case 3:
//		{
//
//			uint64_t ret = imm & GeneralRN(_core, Rn);
//			LogZ("Logical(immediate)->" << "label:" << "ANDS (immediate)-" << (sf ? "64bit" : "32bit") << ",ret=" << ret);
//			////ANDS xzr, x0, #0xfff
//			GeneralRN(_core, Rd) = Rd == 31 ? 0 : ret;
//			_pstate->n = sf ? GetBitBool(ret, 63) : GetBitBool(ret, 31);
//			_pstate->z = ret == 0;
//			_pstate->c = 0;
//			_pstate->v = 0;
//		}
//		break;
//		default:
//			break;
//		}
//		goto succ;
//	}
//	Abort("Data Processing -- Immediate->Err:" << op0);
//succ:
//	_pcNext();
//	return _err;
//}
